class IsShorter{
public:
	bool operator()(const string* s1,cosnt string& s2){
		return s1.size() < s2.size();
	}
};

class NotShorterThan
{
public:
	NotShorterThan(int len):minLen)(len){}
	bool operator()(const string &str){
		return str.size() >= minLen;
	}
	// ~NotShorterThan();
private:
	int minLen;
};
class PrintString
{
public:
	void operator()(const string &str){
		cout << str << " ";
	}
};

void biggies(vertor<string>& words,vector<string>::size_type sz){
	elimDups(words);

	IsShorter is;
	stable_sort(words.begin(), words.end(),is); //

	NotShorterThan nst(sz);
	auto wc = find_if(words.begin(), words.end(),nst);

	auto count = words.end() - wc;	
	cout << count << " " ;//...

	PrintString ps;
	for_each(wc,words.end(),ps);
	cout << endl;
}

//lambda版本
void biggies(vector<string> &words,vector<string>::size_type sz){
	elimDups(words); //delete overlap words

	stable_sort(words.begin(), words.end(),[](const string &a , const string& b){
		return a.size() < b.size();
	});

	auto wc = find_if(words.begin(), words.end(),[sz](const string & rhs){
		return rhs.size() >= sz;
	});
	///.....0 .
	for_each(wc,words.end(),[](const string& s){cout << s << " "; });
	cout << endl;
0}